リソースモニターを設定してみた – Snowflake Advent Calendar 2019 #SnowflakeDB
どうも。大阪オフィスの玉井です。
当エントリは『Snowflake Advent Calendar 2019』の11日目のエントリです。
Snowflakeの課金はいわゆる「使った分だけ課金」という料金体系になっていますが、管理する立場の方としては、自環境のSnowflakeが一体どれだけ使われているのか気になったり、何なら「一定以上使われないように、自動で中断させたい」みたいなことを考えたりするかもしれません。
そんな方のために、Snowflakeにはリソースモニターという機能があります。簡単設定でSnowflakeの使用率を監視することができるのですが、今回はそれをちょこっと試してみました。
リソースモニターとは
概要
Snowflakeの仮想ウェアハウスは、稼働している時間に応じて、クレジットを消費します。消費されるクレジット数は、仮想ウェアハウスのサイズと実行時間によって異なります。
コストを管理し、意図していない仮想ウェアハウスのクレジット使用を防ぐことができるように、Snowflakeはリソースモニターを提供しています。このリソースモニターは、ただ使用率を見るだけでなく、しきい値を超えたら仮想ウェアハウスを強制的にサスペンドする、といったアクションを行うことも可能です。
※Working with Resource Monitors — Snowflake Documentationより
- コストの管理を支援し、予期しないクレジットの使用を回避
- アカウントレベルまたは仮想ウェアハウスレベルで設定
- さまざまなアクションを起動可能
- アラート通知の送信
- 倉庫の一時停止
リソースモニターの注意点
- リソースモニターを設定するためには、ACCOUNTADMIN権限が必要
- リソースモニターには下記の設定項目が存在する
- クレジットクォータ
- (監視対象の)レベル
- アカウント
- 仮想ウェアハウス
- (監視の)スケジュール
- start
- end
- frequency
- (しきい値に達した時に行う)アクション
- notify
- suspend
- suspend immediate
- クレジット消費を厳密に制御することを意図していない
- アクションが起動される前にクレジット(の上限)が超過する可能性がある
- ロールの設定で通知を有効にする必要がある
リソースモニターを設定してみた
リソースモニターの設定は、Web画面でもSQLでも実施することができます。今回はWebからやってみます。
リソースモニターを作成する
まずはデフォルトスケジュールで作成してみます。デフォルトスケジュールというのは、設定完了後すぐに監視を開始し、次の月が来たらリセットするというスケジュールです。
繰り返しになりますが、リソースモニターはACCOUNTADMINじゃないと設定することができません。ですので、まずACCOUNTADMINにスイッチロールします。
上部メニューのAccountを選択してアカウント画面に移動、Resource MonitorsのタブからCreate a Resource Monitorを選びます。
リソースモニターの名前とクレジットの割当分を入力し、各種設定を行っていきます。今回は仮想ウェアハウス単位で監視したいので、画像のように仮想ウェアハウスを指定します。スケジュールはデフォルトでいきたいのでそのまま。しきい値とアクションについては下記のようにしました。
- クレジット(の使用率)が50%を超えたら通知
- クレジット(の使用率)が100%を超えたら通知してサスペンド
- クレジット(の使用率)が110%を超えても仮想ウェアハウスがまだ動いている場合はすぐサスペンド
設定を完了してCreateを押すと、リソースモニターが作成されます。
カスタムスケジュールの場合
監視する期間をカスタムしたい場合は、先程の設定画面でスケジュールを指定するだけで設定することができます。今回は先程作ったスケジュールを編集してみたいと思います。Account→Resource Monitorsで、さっき作ったリソースモニターを選んでEditを選ぶと、先程と同じ設定画面が出てきます。
ここで、ScheduleのCustomizeを選べばスケジュール設定画面が出てくるので、好きな期間に設定します。「一定期間だけ週単位で監視する」といった設定が可能です。
おわりに
リソースモニターのさわりだけサラッとやってみました。複数人が本格的にSnowflakeを使い始める段階に来たときは、ぜひリソースモニターを使いましょう。
参考資料
明日12日目はikedaによる「Connector for PythonでPandasにデータを読み込む」の予定です。お楽しみに。